package com.example.inventoryapp

import android.app.Activity
import android.content.Context
import android.content.res.Configuration.UI_MODE_NIGHT_MASK
import android.content.res.Configuration.UI_MODE_NIGHT_YES
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.view.WindowCompat
import com.example.inventoryapp.ui.theme.DarkColorScheme
import com.example.inventoryapp.ui.theme.InventoryAppTheme
import com.example.inventoryapp.ui.theme.LightColorScheme


// 定义扩展属性 Context.isNightMode
// 作用：判断当前设备是否处于深色模式
// 实现：通过检查 uiMode与 UI_MODE_NIGHT_MASK的按位与结果是否等于 UI_MODE_NIGHT_YES
val Context.isNightMode: Boolean
    get() = resources.configuration.uiMode.and(UI_MODE_NIGHT_MASK) == UI_MODE_NIGHT_YES
class MainActivity : ComponentActivity() {
    // onCreate方法是Activity 创建时的入口方法
    override fun onCreate(savedInstanceState: Bundle?) {
        // 定义状态栏和导航栏颜色
        // 作用：从主题颜色方案中提取状态栏和导航栏的颜色
        // 说明：
        //   LightColorScheme和 DarkColorScheme是自定义的 Material You 颜色方案
        //   toArgb()将 Compose 颜色转换为 Android 的 ARGB 整数值
        val lightStatusScrim = LightColorScheme.primary.toArgb()
        val darkStatusScrim = DarkColorScheme.primary.toArgb()
        val lightNavScrim = LightColorScheme.surface.toArgb()
        val darkNavScrim = DarkColorScheme.surface.toArgb()

        // 设置边缘到边缘显示（Edge-to-Edge）
        // 作用：根据系统版本设置状态栏和导航栏的颜色
        // 说明：
        //    对于 Android U（API 34）及以上，使用 enableEdgeToEdge并传入自动适应深色/浅色模式的样式
        //    对于旧版本，直接设置 window.statusBarColor和 window.navigationBarColor
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
            enableEdgeToEdge(
                statusBarStyle = SystemBarStyle.auto(lightStatusScrim, darkStatusScrim),
                navigationBarStyle = SystemBarStyle.auto(lightNavScrim, darkNavScrim)
            )
        } else {
            window.statusBarColor = when (resources.configuration.uiMode) {
                UI_MODE_NIGHT_YES -> darkStatusScrim
                else -> lightStatusScrim
            }
            window.navigationBarColor = when (resources.configuration.uiMode) {
                UI_MODE_NIGHT_YES -> darkNavScrim
                else -> lightNavScrim
            }
        }

        // 调用父类 onCreate
        // 作用：执行 Activity 的默认创建逻辑
        super.onCreate(savedInstanceState)

        // 设置状态栏和导航栏图标颜色
        // 作用：根据当前是否为深色模式，设置状态栏和导航栏图标的颜色（浅色或深色）
        // 说明：
        //    深色模式时使用浅色图标，浅色模式时使用深色图标
        //    WindowCompat是 Jetpack 提供的兼容类
        WindowCompat.getInsetsController(window, window.decorView).apply {
            isAppearanceLightStatusBars = !isNightMode
            isAppearanceLightNavigationBars = !isNightMode
        }

        // 设置 Compose 内容
        // 作用：定义 Activity 的 UI 内容
        // 结构：
        //    InventoryAppTheme：应用自定义主题
        //    Scaffold：提供基本的 Material Design 布局结构（如 TopAppBar 的预留空间）
        //    innerPadding：Scaffold 内部内容的内边距（避免内容被状态栏等遮挡）
        //    Surface：Material 表面，设置背景色
        //    InventoryApp()：应用的主 Composable 函数，包含实际界面
        setContent {
            InventoryAppTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Surface(
                        modifier = Modifier.fillMaxSize().padding(innerPadding),
                        color = MaterialTheme.colorScheme.background
                    ) {
                        InventoryApp()
                    }
                }
            }
        }
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    InventoryAppTheme {
        InventoryApp()
    }
}